nVertices=1559;
nIteracoes=50;
rankInicial= 1.00/ nVertices;
atual=[];
anterior=[];
dicionario=[];

#Cria dicionario
f = open ("../dados/dicionario");
for linha in f.readlines():
	dicionario.append(linha);

#Grava o rank inicial de cada vertice
x=0;
f = open("../dados/out_degree.clu");

for outDegree in f.readlines():
	atual.append([x, int(outDegree) ,rankInicial]);
	x += 1;
anterior= list(atual);

#print atual

#realiza as iteracoes
x=0;
while x < nIteracoes:
	f = open("../dados/apontadoPor");
	
	vez=0;
	for linha in f.readlines():
		rank=0;
	
#		print "VEZ %s" % vez
		teste=linha[linha.find(":") +1:linha.find("\\")] 
		if teste != "":
			for aponta in linha[linha.find(":") +1:linha.find("\\")].split(" "): 
				if aponta != "":
					try:
						rank += anterior[int(aponta)- 1][2] / anterior[int(aponta)-1 ][1];
					except ZeroDivisionError:
						rank += 0;
	#	print vez 
		atual[vez][2]=rank;
		vez += 1;
	
	anterior=list(atual);
	x+=1;


print "numero de vezes %s" % vez	
sorted_atual=sorted(atual, key=lambda atual2: atual2[2], reverse=True)

#print atual 
#Imprime o rank
print "Rank para %s iteracoes: " % nIteracoes
for objeto in sorted_atual:
	print objeto
	print dicionario[objeto[0]];
